package com.cyj.dream.core.util.user;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.IdcardUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * @Description: 身份证工具类根据身份证号码获取各种信息 IdcardUtil 现在支持大陆15位、18位身份证，港澳台10位身份证。
 * @BelongsProject: DreamChardonnay
 * @BelongsPackage: com.cyj.dream.core.util.user
 * @Author: ChenYongJia
 * @CreateTime: 2021-09-26
 * @Email: chen87647213@163.com
 * @Version: 1.0
 */
@Slf4j
public class IdCardUtils {

    /**
     * 验证身份证是否合法
     *
     * @param idCardNumber
     * @return
     */
    public static boolean isValidCard(String idCardNumber) {
        return IdcardUtil.isValidCard(idCardNumber);
    }

    /**
     * 身份证15位转18位
     *
     * @param idCardNumber
     * @return
     */
    public static String convert15To18(String idCardNumber) {
        return IdcardUtil.convert15To18(idCardNumber);
    }

    /**
     * 获取生日
     *
     * @param idCardNumber
     * @return
     */
    public static String getBirthByIdCard(String idCardNumber) {
        return IdcardUtil.getBirthByIdCard(idCardNumber);
    }

    /**
     * 获取年龄
     *
     * @param idCardNumber
     * @return
     */
    public static int getAgeByIdCard(String idCardNumber) {
        return IdcardUtil.getAgeByIdCard(idCardNumber);
    }

    /**
     * 获取生日年
     *
     * @param idCardNumber
     * @return
     */
    public static Short getYearByIdCard(String idCardNumber) {
        return IdcardUtil.getYearByIdCard(idCardNumber);
    }

    /**
     * 获取生日月
     *
     * @param idCardNumber
     * @return
     */
    public static Short getMonthByIdCard(String idCardNumber) {
        return IdcardUtil.getMonthByIdCard(idCardNumber);
    }

    /**
     * 获取生日天
     *
     * @param idCardNumber
     * @return
     */
    public static Short getDayByIdCard(String idCardNumber) {
        return IdcardUtil.getDayByIdCard(idCardNumber);
    }

    /**
     * 获取性别 1男 0女
     *
     * @param idCardNumber
     * @return
     */
    public static int getGenderByIdCard(String idCardNumber) {
        return IdcardUtil.getGenderByIdCard(idCardNumber);
    }

    /**
     * 获取省份
     *
     * @param idCardNumber
     * @return
     */
    public static String getProvinceByIdCard(String idCardNumber) {
        return IdcardUtil.getProvinceByIdCard(idCardNumber);
    }

    /**
     * 模拟调用 hutool 封装的 IdcardUtil 工具类
     *
     * @param args
     */
    public static void main(String[] args) {
        String idCard = "410305199801022513";
        String idCard2 = "412825199706261545";
        String ID_15 = "150102880730303";
        log.info("验证身份证是否合法：" + IdCardUtils.isValidCard(idCard));
        log.info("身份证15位转18位：" + IdCardUtils.convert15To18(ID_15));
        log.info("获取生日：" + IdCardUtils.getBirthByIdCard(idCard));
        log.info("获取年龄：" + IdCardUtils.getAgeByIdCard(idCard));
        log.info("获取生日年：" + IdCardUtils.getYearByIdCard(idCard));
        log.info("获取生日月：" + IdCardUtils.getMonthByIdCard(idCard));
        log.info("获取生日天：" + IdCardUtils.getDayByIdCard(idCard));
        log.info("获取性别：" + IdCardUtils.getGenderByIdCard(idCard));
        log.info("获取省份：" + IdCardUtils.getProvinceByIdCard(idCard));

        /**
         * 如果你了解Python，你一定知道Python有dict这一数据结构，也是一种KV（Key-Value）结构的数据结构，
         * 类似于Java中的Map，但是提供了更加灵活多样的使用。
         * Hutool中的Dict对象旨在实现更加灵活的KV结构，针对强类型，
         * 提供丰富的getXXX操作，将HashMap扩展为无类型区别的数据结构
         *
         * Dict继承HashMap，其key为String类型，value为Object类型，通过实现BasicTypeGetter接口提供针对不同类型的get方法，
         * 同时提供针对Bean的转换方法，大大提高Map的灵活性。
         */
        Dict dict = Dict.create()
                //int
                .set("key1", 1)
                //long
                .set("key2", 1000L)
                //Date
                .set("key3", DateTime.now());
        Console.log("This is Console log for {}.", dict);
    }

}
